package br.com.imob.dao;

import br.com.imob.modelo.Grupo;

import java.util.List;

/** @user Gilton Nascimento
 *  @since 11:35:55 31/01/2011 2011
 *  @version 
 */

public class GrupoDao extends GenericDao {

	public GrupoDao() {  }
	
	public Integer adicionarGrupo(Grupo grupo) {
		saveOrUpdatePojo(grupo);
		return grupo.getGrupoId();
	}
	
	public void removerGrupo(Grupo grupo) {
		removerPojo(grupo);
	}

	/* Precisa definir o ID */
	public void atualizarGrupo(Grupo recupera) {
		saveOrUpdatePojo(recupera);
	}
	
	/**
	 * Editar um Grupo
	 * @param String oldGrupo
	 * @param String newGrupo
	 */
	public void atualizarGrupo(String oldGrupo, String newGrupo ) {
		if ( ( !"".equals(oldGrupo) && oldGrupo != null )
			&& ( !"".equals(newGrupo) && newGrupo != null ) ) 
			atualizarGrupo( getGrupoQNamed(oldGrupo), new Grupo(newGrupo) );
	}
	
	
	/* Precisa definir qual atribuito sera a chave a identificar 
	 * a tupla a ser alterada */
	public void atualizarGrupo(Grupo recuperar, Grupo alterar) {
		recuperar = retriveGrupo(recuperar);
		
		if(alterar.getGrupo() != null)
			recuperar.setGrupo(alterar.getGrupo());
		
		saveOrUpdatePojo(recuperar);
	}
	
//	Artificio para Recuperar a Tupla de Grupo
	protected Grupo retriveGrupo(Grupo recuperar) {
		if( recuperar.getGrupoId() == null )
			return getGrupoQNamed( recuperar.getGrupo() );
		if( recuperar.getGrupoId() == null && recuperar.getGrupo() == null )
			return getGrupoQNamed( recuperar.getGrupoDescricao() );
		else
			return getGrupo( recuperar.getGrupoId() );
	}
	
	
//	Consultas
	public Grupo getGrupo(Integer key) {
		return getPojoByID(Grupo.class, key);
	}
	public Grupo getGrupoByQuery(String query, Object...params) {
		return getPojoByQry(query, params);
	}
	public Grupo getGrupoQNamed(String fltrGrupo) {
		return getPojoByQNamed("Grupo.findByGrupo", fltrGrupo);
	}
	public Grupo getGrupoQNamedDesc(String fltrDesc) {
		return getPojoByQNamed("Grupo.findByGrupoDescricao", fltrDesc);
	}
	
	public List<Grupo> getGrupos() {
		return (List<Grupo>) getALL(Grupo.class);
	}
	public List<Grupo> getGruposQNamedPRX(String fltrGrupo) {
		return getListByQNamedPRX("Grupo.findLikeByGrupo", fltrGrupo);
	}
	public List<Grupo> getGruposQNamedDescPRX(String fltrDesc) {
		return getListByQNamedPRX("Grupo.findLikeByGrupoDescricao", fltrDesc);
	}
	public List<Grupo> getGruposByQuery(String query, Object...params) {
		return getListByQry(query, params);
	}
	
}